#ifndef __BOARD_H_
#define __BOARD_H_

#include "STC32G12K128.h"
#include "Type_def.h"

// 工作频率可选值:35000000, 33177600, 30000000, 27000000. 24000000, 22118400
#define sys_clk 35000000UL // isp超频最高38Mhz，反而运行有点不正常了

// 串口自动下载自定义指令设置
#define STCISPCMD "@STCISP#"

// 设置各类数据保存的地址
// 已在ISP设置了64K的E2PROM，地址以512字节为单位增长，因为要一个扇区的

#define ROAD_STD_DATA_ADDR 0x0000
#define ROUNDIN_POINT_ADDR 0x0200
#define CALI_GYRO_DATA_ADDR 0x0400
#define ROUNDOUT_POINT_ADDR 0x0600
#define ELEM_RESPONSE_ADDR 0x0800
#define CTRL_SETTINGS_ADDR 0x0A00

// 主定时器1和副定时器4轮询，是主函数while循环体内代码的开关
typedef struct
{
    uint32 Main; // 500hz
    uint8 MainSW;
    uint32 Tim4; // 1000Hz
    uint8 Tim4SW;
} Counter_type;

extern Counter_type Counter;

// 设置P54为复位引脚
#define SET_P54_RESRT (RSTCFG |= 1 << 4)

// DEBUG串口收发设置
#define DEBUG_UART UART_1
#define DEBUG_UART_BAUD 115200
#define DEBUG_UART_RX_PIN UART1_RX_P30
#define DEBUG_UART_TX_PIN UART1_TX_P31
#define DEBUG_UART_TIM TIM_2

// 电池ADC引脚
#define ADC_BAT_Pin P13

// LED三色灯
#define LEDB_Pin P05
#define LEDR_Pin P06
#define LEDG_Pin P07

// 无源蜂鸣器
#define BUZZER_Pin P77

// 旋转编码器
#define EC11_BTN_Pin P47
#define EC11_A_Pin P10
#define EC11_B_Pin P11

// 电机编码器
#define LeftDire_Pin P52
#define EncoLeft_Pin P04
#define RightDire_Pin P50
#define EncoRight_Pin P34

// OLED屏幕、IMU和ADC的spi
#define SPI_MOSI_Pin P23
#define SPI_MISO_Pin P24
#define SPI_SCK_Pin P25

// 外部ADC
#define ADC_CS_Pin P45

// OLED屏幕
#define OLED_CS_Pin P01
#define OLED_DC_Pin P00
#define OLED_RST_Pin P46

// IMU和恒温pwm引脚
#define CS_ACCEL_Pin P21
#define CS_GYRO_Pin P26
#define INT_ACCEL_Pin P20
#define INT_GYRO_Pin P22
#define IMU_TEMP_Pin P76

// TOF激光测距
#define DL1A_SDA_Pin P33
#define DL1A_SCL_Pin P32

void Board_Init(void);
void DisableGlobalIRQ(void);
void EnableGlobalIRQ(void);

#endif // !__BOARD_H_
